/**
 * TDS PEC 4
 * Grupo 3H2M 
 *
 * El paquete <code>edu.uoc.tds.pec4.rmi</code> contiene los interfaces
 * usados tanto por el servidor como por la aplicación cliente.
 */
package edu.uoc.tds.pec4.rmi;

import edu.uoc.tds.pec4.beans.AuditoriaDTO;
import edu.uoc.tds.pec4.beans.AulaDTO;
import edu.uoc.tds.pec4.beans.CFisicaDTO;
import edu.uoc.tds.pec4.beans.EquipamientoDTO;
import edu.uoc.tds.pec4.beans.RolDTO;
import edu.uoc.tds.pec4.beans.UsuarioDTO;
import edu.uoc.tds.pec4.server.bbdd.exceptions.GestorMantenimientoException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.List;

/**
 * La interfaz <code>GestorMantenimientoInterface</code> especifica los mÃ©todos 
 * del subsistema de mantenimiento invocables remotamente 
 *
 * @author	Luis Rivas Mariño
 * @version	27/11/2011
 * @since	1.00
 */
public interface GestorMantenimientoInterface extends Remote {

    /**
     * Realiza el alta de un usuario
     * @param   usuario El usuario a dar de alta
     * @return  true: Si el alta ha sido correcta, 
     *          false: En cualquier otro caso
     * @throws  RemoteException
     * @throws  GestorMantenimientoException
     */
    public void altaUsuario(UsuarioDTO usuario) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Realiza la baja lógica de un usuario
     * @param idUsuario El identificador del usuario a dar de baja lógica
     * @return true: Si la baja se ha realizado correctamente,
     *         false: En cualquier otro caso
     * @throws  RemoteException
     * @throws  GestorMantenimientoException
     */
    public void bajaUsuario(String idUsuario) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Realiza la consulta de un usuario
     * @param idUsuario El identificador del usuario a consultar
     * @return usuario Los datos del usuario consultado
     * @throws  RemoteException
     * @throws  GestorMantenimientoException
     */
    public UsuarioDTO consultaUsuarioPorId(String idUsuario) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Realiza la consulta de un usuario por NIF
     * @author Luis Rivas Mariño
     * @since 10/12/11  
     * @param   nif El nif del usuario a consultar en la base de datos
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public UsuarioDTO consultaUsuarioPorNif(String nif) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Realiza la consulta de un usuario por su nombre y apellidos
     * @author Luis Rivas Mariño
     * @since 10/12/11  
     * @param   nombre El nombre del usuario a consultar en la base de datos
     * @param   apellidos Los apellidos del usuario a consultar en la base de datos      
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public UsuarioDTO consultaUsuarioPorNombre(String nombre, String apellidos) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Realiza la modificación de los datos de un usuario
     * @param idUsuario El identificador del usuario a modificar
     * @return true: Si la modificación se ha realizado correctamente,
     *         false: En cualquier otro caso
     * @throws  RemoteException
     * @throws  GestorMantenimientoException
     */
    public void modificaUsuario(UsuarioDTO usuario) throws RemoteException,
            GestorMantenimientoException;

/**
     * Realiza la reactivación de un usuario que estaba en baja lógica
     * @param idUsuario El identificador del usuario a reactivar
     * @throws RemoteException
     * @throws GestorMantenimientoException 
     */
    public void activaUsuario(String idUsuario)throws RemoteException,
            GestorMantenimientoException;        
    
    /**
     * Inserta en el campo CC correspondiente a un usuario del tipo Cliente
     * los datos del número de cuenta corriente facilitados
     * @param idUsuario el identificador del usuario Cliente
     */
    public void ccCliente(String cc, String idUsuario) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Obtiene una lista de todos los roles autorizados a un usuario 
     * @throws RemoteException
     * @throws GestorMantenimientoException 
     */
    public List<RolDTO> getRoles(String id) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Inserta los roles asignados a un usuario en la base de datos
     * @param idUsuario El identificador del usuario
     * @param idRol El identificador del rol asignado
     */
    public void usuarioRol(String idUsuario, int idRol) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Comprueba si un usuario tiene asignado un rol concreto
     * @param idUsuario El identificador del usuario
     * @param idRol El identificador del rol asignado
     * @return true  El usuario tiene asignado el rol
     *         false El usuario no tiene asignado el rol
     */
    public boolean rolUsuario(String idUsuario, int idRol) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Elimina un rol asignado a un usuario en la base de datos
     * @param idUsuario El identificador del usuario
     * @param idRol El identificador del rol asignado
     */
    public void bajaRol(String idUsuario, int idRol) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Realiza el alta de un aula
     * @param   aula El aula a dar de alta
     * @return  true: Si el alta ha sido correcta, 
     *          false: En cualquier otro caso
     * @throws  RemoteException
     * @throws  GestorMantenimientoException
     */
    public int altaAula(AulaDTO aula) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Realiza la baja lógica de un aula
     * @param idAula El identificador del aula a dar de baja lógica
     * @return true: Si la baja se ha realizado correctamente,
     *         false: En cualquier otro caso
     * @throws  RemoteException
     * @throws  GestorMantenimientoException
     */
    public void bajaAula(int idAula) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Realiza la consulta de un aula por su identificador
     * @param idAula El identificador del aula a consultar
     * @return aula Los datos del aula consultada
     * @throws  RemoteException
     * @throws  GestorMantenimientoException
     */
    public AulaDTO consultaAula(int idAula) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Realiza la consulta de un aula por su nombre
     * @param nombre El nombre del aula a consultar
     * @return aula Los datos del aula consultada
     * @throws  RemoteException
     * @throws  GestorMantenimientoException
     */
    public AulaDTO consultaAulaNombre(String text) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Realiza la modificación de los datos de un aula
     * @param idAula El identificador del aula a modificar
     * @return true: Si la modificación se ha realizado correctamente,
     *         false: En cualquier otro caso
     * @throws  RemoteException
     * @throws  GestorMantenimientoException
     */
    public void modificaAula(AulaDTO aula) throws RemoteException,
            GestorMantenimientoException;
    
    /**
     * Realiza la asignación de una lista de características físicas a un aula
     * @param listaCFisicas es la lista de características físicas a asignar
     * @param idAula El identificador del aula 
      * @throws  RemoteException
     * @throws  GestorMantenimientoException
     */    
    public void cFisicaToAula(List<CFisicaDTO> listaCFisicas, int idAula) throws RemoteException,
            GestorMantenimientoException;

/**
     * Obtiene la lista de características físicas existentes en la base de datos
     * @param idAula El identificador del aula
     * @return lcFisicas La lista de las características físicas existentes en el aula
     */
    public List<CFisicaDTO> cFisicasFromAula(int idAula) throws RemoteException, 
            GestorMantenimientoException;    
    
    /**
     * Realiza el alta de un equipamiento
     * @param   equipamiento El equipamiento a dar de alta
     * @return  el nuevo id del equipamiento dado de alta
     * @throws  RemoteException
     * @throws  GestorMantenimientoException
     */
    public int altaEquipamiento(EquipamientoDTO equipamiento) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Realiza la baja lógica de un equipamiento
     * @param idEquipamiento El identificador del equipamiento a dar de baja lógica
     * @return true: Si la baja se ha realizado correctamente,
     *         false: En cualquier otro caso
     * @throws  RemoteException
     * @throws  GestorMantenimientoException
     */
    public void bajaEquipamiento(int idEquipamiento) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Realiza la activación de un equipamiento que estaba en baja lógica
     * @param idEquipamiento El identificador del equipamiento a activar
     * @throws RemoteException
     * @throws GestorMantenimientoException 
     */
    public void activaEquipamiento(int idEquipamiento) throws RemoteException, GestorMantenimientoException;

    /**
     * Realiza la consulta de un equipamiento
     * @param idEquipamiento El identificador del equipamiento a consultar
     * @return equipamiento Los datos del equipamiento consultado
     * @throws  RemoteException
     * @throws  GestorMantenimientoException
     */
    public EquipamientoDTO consultaEquipamiento(int idEquipamiento) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Realiza la modificación de los datos de un equipamiento
     * @param idEquipamiento El identificador del equipamiento a modificar
     * @return true: Si la modificación se ha realizado correctamente,
     *         false: En cualquier otro caso
     * @throws  RemoteException
     * @throws  GestorMantenimientoException
     */
    public void modificaEquipamiento(EquipamientoDTO equipamiento) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Devuelve la lista de equipamiento existente en la base de datos
     * @return  La lista de todos los equipamientos de la aplicación
     * @throws  RemoteException
     * @throws  GestorMantenimientoException
     */
    public List<EquipamientoDTO> listaEquipamiento() throws RemoteException,
            GestorMantenimientoException;

    /**
     * Realiza el alta de una auditoria
     * @param   auditoria La auditoria a dar de alta
     * @throws  RemoteException
     * @throws  GestorMantenimientoException
     */
    public void altaAuditoria(AuditoriaDTO auditoria) throws RemoteException,
            GestorMantenimientoException;

    /**
     * Obtiene  la lista de características físicas del aula
     * @return  cFisicas La lista de las características físicas existentes en la
     *          base de datos
     * @throws  RemoteException
     * @throws  GestorMantenimientoException
     */
    public List<CFisicaDTO> cFisicasAula() throws RemoteException,
            GestorMantenimientoException;

    /**
     * Realiza la activación de un aula que estaba en baja lógica
     * @param idAula El aula del equipamiento a activar
     * @throws RemoteException
     * @throws GestorMantenimientoException 
     */    
    public void activaAula(int idAula) throws RemoteException,
            GestorMantenimientoException;

}